#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn = 5e4+10;
const double eps = 1e-8;


typedef struct Point{
    double x,y;
    Point(double x=0,double y=0):x(x),y(y){}
}Vector;

Vector operator + (const Vector &A, const Vector &B){ return Vector(A.x+B.x,A.y+B.y); }
Vector operator - (const Vector &A, const Vector &B){ return Vector(A.x-B.x,A.y-B.y); }
Vector operator * (const Vector &A, double p){ return Vector(A.x*p,A.y*p); }
Vector operator / (const Vector &A, double p){ return Vector(A.x/p,A.y/p); }

bool operator <(const Point &A,const Point &B){
    return A.x<B.x || (A.x==B.x && A.y<B.y);
}

int dcmp(double x){
    if( fabs(x)<eps ) return 0;
    return x<0 ? -1 : 1;
}

double Cross(const Vector &A, const Vector &B){
    return A.x*B.y-A.y*B.x;
}

double Dot(const Vector &A, const Vector &B){
    return A.x*B.x+A.y*B.y;
}

double Length(const Vector &A){
    return Dot(A,A);
}

double Area2(const Point &A, const Point &B, const Point &C){
    return Cross(B-A,C-A);
}

int ConvexHull(Point *p,int n,Point *ch){
    sort(p,p+n);
    int m=0;
    for(int i=0;i<n;i++){
        while( m>1 && dcmp(Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2]))<=0 ) m--;
        ch[m++]=p[i];
    }
    int k=m;
    for(int i=n-2;i>=0;i--){
        while( m>k && dcmp(Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2]))<=0) m--;
        ch[m++]=p[i];
    }
    if( n>1 ) m--;
    return m;
}

Point p[maxn],ans[maxn];

double RotatingCaliper(int m, Point *ch){
    int q=1;
    ch[m] = ch[0];
    double ans = 0.0;
    for(int p=0;p<m;p++){
        while( fabs( Area2(ch[p],ch[p+1],ch[q+1]) ) > fabs( Area2(ch[p],ch[p+1],ch[q]) ) ) q=(q+1)%m;
        ans = max(ans, max(Length(ch[q+1]-ch[p]), Length(ch[q+1]-ch[p+1])));
        ans = max(ans, max(Length(ch[q]-ch[p]), Length(ch[q]-ch[p+1])));
    }
    return ans;
}

int main()
{
    int n;
    while( ~scanf("%d",&n) ){
        for(int i=0;i<n;i++){
            int x,y; scanf("%d%d",&x,&y);
            p[i] = Point(x,y);
        }
        int cnt = ConvexHull(p,n,ans);
        double res = RotatingCaliper(cnt,ans);
        printf("%.6f\n",sqrt(res));
    }
    return 0;
}
